﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MJM.RPP.AccesoDatos;
using MJM.RPP.EntidadesNegocio;

namespace MJM.RPP.ComponentesNegocio
{
    public class PersonaTramiteCN
    {
        private PersonaTramiteEN CrearClaseVacia()
        {
            PersonaTramiteEN objPersonaTramiteEN = new PersonaTramiteEN();
            objPersonaTramiteEN.ApePaterno = "";
            objPersonaTramiteEN.ApeMaterno = "";
            objPersonaTramiteEN.Nombres = "";
            objPersonaTramiteEN.NombrePersona = "";
            objPersonaTramiteEN.Sexo = "";
            objPersonaTramiteEN.DNI = "";
            objPersonaTramiteEN.Usuario = "";
            objPersonaTramiteEN.Estado = 1;
            objPersonaTramiteEN.Eliminado = 1;
            return objPersonaTramiteEN;
        }

        static public PersonaTramiteAD objPersonaTramiteAD = new PersonaTramiteAD();

        public List<PersonaTramiteEN> Listar(String Paterno, String Materno, int IDArea)
        {
            return objPersonaTramiteAD.Listar(IDArea, Paterno, Materno, "");
        }

        public List<PersonaTramiteEN> ListarSinArea(String Paterno, String Materno, String DNI)
        {
            return objPersonaTramiteAD.Listar(0, Paterno, Materno, DNI);
        }

        public PersonaTramiteEN Obtener(int ID)
        {
            List<PersonaTramiteEN> lst = objPersonaTramiteAD.ListarCompleto(0);
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].IDPersona == ID)
                    return lst[i];
            }
            return null;
        }

        public List<PersonaTramiteEN> ListarTodos()
        {
            return objPersonaTramiteAD.Listar(0, "", "", "");
        }

        public int ObtenerArea(String Usuario)
        {
            List<PersonaTramiteEN> lst = ListarTodos();
            for (int i = 0; i < lst.Count; i++)
            {
                if (lst[i].Usuario.ToUpper() == Usuario.ToUpper())
                {
                    return lst[i].IdOficina;
                }
            }

            return 0;
        }

        public List<PersonaTramiteEN> ListarCompleto(int Area)
        {
            return objPersonaTramiteAD.ListarCompleto(Area);
        }

        public List<PersonaTramiteEN> ListarxNombre(String Nombre)
        {
            return objPersonaTramiteAD.ListaXNombre(Nombre);
        }

        public List<PersonaTramiteEN> ListaGeneral(PersonaTramiteEN objCriterios, int modo)
        {
            List<PersonaTramiteEN> lstTodos = objPersonaTramiteAD.ListaGeneral(objCriterios);
            List<PersonaTramiteEN> lstFinal = new List<PersonaTramiteEN>();
            switch (modo)
            {
                case 1:
                    {
                        //Filtra personas de una misma oficina
                        var lstresult = lstTodos.GroupBy(c => c.IdOficina);
                        foreach (var aux in lstresult)
                        {
                            if (aux.ToList()[0].IdOficina == objCriterios.IdOficina)
                            {
                                lstFinal = aux.ToList();
                                break;
                            }
                        }
                    }; break;
                case 2: 
                    {
                        for (int i = 0; i < lstTodos.Count; i++)
                        {
                            if (lstTodos[i].EsFuncionario)
                                lstFinal.Add(lstTodos[i]);
                        }
                    }; break;
                case 3:
                    {

                    }; break;
                case 4:
                    {

                    }; break;
                default:
                    {
                        lstFinal = lstTodos;
                    };break;
            }

            return lstFinal;
        }

        public List<PersonaTramiteEN> ListarFuncionarios(string Nombre)
        {
            PersonaTramiteEN obj = new PersonaTramiteEN();
            obj.Eliminado = 1;
            obj.Estado = 1;
            obj.NombrePersona = Nombre;
            return ListaGeneral(obj,2);
        }

        public string[] ListaNombres()
        {
            PersonaTramiteEN objPersonaTramiteEN = CrearClaseVacia();
            List<PersonaTramiteEN> lstPersonas = ListaGeneral(objPersonaTramiteEN,0);
            var lst = lstPersonas.GroupBy(c => c.Nombres).ToList();

            string[] arrayN = new string[lst.Count];
            int count = 0;
            foreach (var itemNom in lst)
            {
                List<PersonaTramiteEN> aux = itemNom.ToList();
                arrayN[count] = aux[0].Nombres;
                count++;
            }
            Array.Sort(arrayN);
            return arrayN;
        }

        public string[] ListaPaterno()
        {
            PersonaTramiteEN objPersonaTramiteEN = CrearClaseVacia();
            List<PersonaTramiteEN> lstPersonas = ListaGeneral(objPersonaTramiteEN, 0);
            var lst = lstPersonas.GroupBy(c => c.ApePaterno).ToList();
            string[] arrayN = new string[lst.Count];
            int count = 0;
            foreach (var itemNom in lst)
            {
                List<PersonaTramiteEN> aux = itemNom.ToList();
                arrayN[count] = aux[0].ApePaterno;
                count++;
            }
            Array.Sort(arrayN);
            return arrayN;
        }

        public string[] ListaMaterno()
        {
            PersonaTramiteEN objPersonaTramiteEN = CrearClaseVacia();
            List<PersonaTramiteEN> lstPersonas = ListaGeneral(objPersonaTramiteEN, 0);
            var lst = lstPersonas.GroupBy(c => c.ApeMaterno).ToList();
            string[] arrayN = new string[lst.Count];
            int count = 0;
            foreach (var itemNom in lst)
            {
                List<PersonaTramiteEN> aux = itemNom.ToList();
                arrayN[count] = aux[0].ApeMaterno;                
                count++;
            }
            Array.Sort(arrayN);
            return arrayN;
        }
    }
}
